package com.egghiro.j2se.game.scardbattle.view.console;

import com.egghiro.j2se.game.scardbattle.controller.battle.Battle;
import com.egghiro.j2se.game.scardbattle.model.character.player.Soldier;
import com.egghiro.j2se.game.scardbattle.model.gamedata.PlayerData;
import com.egghiro.j2se.game.scardbattle.param.Message;

import consolegame.framework.ConsoleGame;

public class CardBattleConsoleView extends ConsoleGame {
    private static volatile CardBattleConsoleView thisGameInstance = null;

    public static CardBattleConsoleView getInstance() {
        if (thisGameInstance == null) {
            synchronized (CardBattleConsoleView.class) {
                if (thisGameInstance == null) {
                    thisGameInstance = new CardBattleConsoleView();
                }
            }
        }

        return thisGameInstance;
    }
    
    private PlayerData playerData;// 単例？
    
    // 戦士（主人公）
    private Soldier soldier;
    
    private Battle battle;
    
    private String playerAction; 
    
//      // 倒したモンスター数
//    private int monsterCount; // TODO playerDataに
    
    public PlayerData getPlayerData() {
        return playerData;
    }
    
    public Soldier getSoldier() {
        return soldier;
    }

    private CardBattleConsoleView() {
        
    }

    @Override
    protected void act() {
        
        playerAction = command("何をしますか:" + Message.MSG_MAIN_MENU_COMMAND);
        if("e".equals(playerAction)){
            // 戦闘開始
            if(battle == null){
                // 戦闘初期化
                battle = new Battle();
            }
            battle.startGame();
        } else { // 寝る TODO
            showMessage(soldier.getName() + "は寝た。");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            showMessage(soldier.getName() + "：ZZZzzz...");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        // TODO 次のsystemに遷移
        
        // 戦闘を継続せずに強制終了するか判定
//        if (commandFlag) {
//            // 戦闘は継続する、しかし次の戦闘前に戦士が生きているか判定
//            if (soldier.getHp() > 0) {
//                // 戦士のHPが0を超えている場合は勝利
//                
//                if (monster.getHp() <= 0) {
////                    // モンスターのHPが0以下の場合は経験値とアイテムを取得
////                    int exp = monster.getExp();
////                    soldier.setExp(soldier.getExp() + exp);
////                    int gold = monster.getGold();
////                    playerData.setGold(playerData.getGold() + gold);
////                    showMessage("経験値" + exp + "と" + gold + "ゴールド" + Message.MSG_DROP);
////                    showMessage("経験値合計:" + soldier.getExp() + "　ゴールド合計:" + playerData.getGold());
////
////                    // 倒したモンスター数をカウントアップ
////                    monsterCount++;
//                } else {
//                    // 戦士もモンスターもHPが0を超えている＝モンスターに逃げられた
//                    // 何もしない
//                }
//            } else {
//                
//                // TODO game over
//            }
//
//            // 次の戦闘に行く前に1.5秒待機
//            try {
//                // 1.5秒待機
//                Thread.sleep(1500);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//
//            if (!"y".equals(command(Message.MSG_NEXTBATTLE))) {
//                commandFlag = false;
//            }
//
//        }
    }

    @Override
    protected boolean isGameClear() {
        // TODO
        return false;// TODO クリア条件考えてない。。。
    }

    @Override
    protected boolean isGameOver() {
        // TODO Auto-generated method stub
        return this.soldier.getHp() <= 0;
    }
    
    @Override
    protected boolean isGameEnd() {
        // TODO
        return "s".equals(playerAction);// TODO寝たら終わり？？
    }

    @Override
    protected boolean loadGame() {
        playerData = new PlayerData();        // TODO

        // 戦士（主人公）登場
        soldier = new Soldier();

//        // 倒したモンスター数
//        monsterCount = 0;
        
        showMessage(soldier.getName() + "がユウシャになりました！");// TODO
        return true;
    }

//    @Override
//    protected void showErrorMessage() {
//        // TODO Auto-generated method stub
//
//    }
//
//    @Override
//    protected void showInputMessage() {
//        // TODO Auto-generated method stub
//
//    }
    
//    @Override
//    protected void showGameClearMessage() {
//        showMessage(GAME_CLEAR_MESSAGE);
//    }
//    
//    @Override
//    public void showMessage(String message) {
//        showMessage(message, true);
//    }
    
    @Override
    protected void doGameOver() {
        showMessage(Message.MSG_GAMEOVER);
    }
    
    @Override
    protected void doGameEnd() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        showMessage("┌-------------------------------------");
        // showMessage("｜戦闘時間:" + endTime + "秒　倒したモンスター数:" + monsterCount);
        showMessage("｜経験値合計:" + soldier.getExp() + "　ゴールド合計:" + playerData.getGold());
        showMessage("｜" + soldier.getName() + "が目覚めた！夢だった！");
        showMessage("└-------------------------------------");
    }
}
